<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>state(状态)</title>
</head>
<body>
    <!-- 引入React核心库 -->
    <script src="../JS/react.development.js"></script>
    <!-- 引入ReactDOM，用于支持react操作DOM -->
    <script src="../JS/react-dom.development.js"></script>
    <!-- 引入babel 用于将书写的JSX语法 编译成JS语法 -->
    <script src="../JS/babel.min.js"></script>

    <div id="test"></div>

    <script type="text/babel">
        class Weather extends React.Component{
            constructor(props){
                super(props)
                this.state = {
                    isHot:true,
                    wind:'微风'
                }
                this.changeWeather = this.changeWeather.bind(this)
                /*  function demo(){
                        console.log(this)   
                    }
                    demo()              输出window对象
                    const x = demo.bind({a:1,b:2})
                    x()                 输出 {a:1,b:2}
                */  
            }
            render(){
                const {isHot} = this.state
                return  (
                    <div>
                        <h1 id="title">今天天气很{isHot?'炎热':'凉爽'}</h1>
                        <h1 onClick={this.changeWeather}>今天天气很{isHot?'炎热':'凉爽'}</h1>        
                    </div>
                )
            }
             //===不能直接调取函数 上边的changeWeather 否则 在第一次运行的时候 会编译JSX changeWeather()没有返回值 会返回给onClick一个 undefined 导致点击事件不能使用
            changeWeather(){           
                //changeWeather放在那里?----Weather的原型对象上,供实例使用
                // 由于changeWeather是作为onClick的回调,所以不能通过实例调用的,是直接调用
                // 类中的方法默认开启了局部的严格模式,所以changeWeather中的this为undefined
                // 'use strict'  手动开启严格模式的代码



                // 获取原型中的isHot
                const isHot = this.state.isHot
                // 严重注意 !!! 状态必须通过setState进行更新,且更新是一种合并动作 不是替换
                this.setState({
                    isHot:!isHot
                })
                // 严重注意 !!! 状态(state)不可直接更改,需要借助api来进行更改 setData 为 Weather继承的React.Component 原型上的方法
                console.log(this);
            }
        }
         
        ReactDOM.render(<Weather/>,document.getElementById('test'))
        let btn = document.getElementById('title')
        btn.addEventListener('click',() => {   //快速新建箭头函数指令 anfn
            console.log('点击了')
        })
    </script>



</body>
</html>